package com.bestcem.xm.member.dao.mapper;

import com.bestcem.xm.member.entity.mysql.GroupEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 示例服务
 *
 * @author yf.wang <yf.wang@idiaoyan.com>
 * @version V1.0
 * @date 2021/12/24
 */
@Mapper
public interface GroupMapper {

    /**
     * 根据组织id统计数据
     *
     * @param orgId
     * @return
     */
    Long countByOrgIdAndIsSample(@Param("orgId") String orgId);

    /**
     * 统计分组名称数量
     *
     * @param orgId
     * @param name
     * @return
     */
    Long countByOrgIdAndName(@Param("orgId") String orgId, @Param("name") String name);

    /**
     * 创建分组
     *
     * @param toEntity
     */
    void createGroup(GroupEntity toEntity);

    /**
     * 根据id 获取数据
     *
     * @param id
     * @return
     */
    GroupEntity findById(@Param("id") String id);

    /**
     * 更新分组
     *
     * @param group
     */
    void updateGroup(GroupEntity group);

    /**
     * 根据orgId 获取数据
     *
     * @param orgId
     * @return
     */
    List<GroupEntity> findByOrgId(@Param("orgId") String orgId);

    /**
     *  根据id 删除分组
     *
     * @param id
     */
    void deleteById(@Param("id") String id);

    /**
     * 根据公司id和auto标识获取当前公司下可自动分组的分组列表
     *
     * @param orgId
     * @param auto
     * @return
     */
    List<GroupEntity> listByOrgIdAndAuto(@Param("orgId") String orgId, @Param("auto") int auto);

    /**
     * 根据分组id更新syncToken字段
     *
     * @param groupId
     * @param syncToken
     * @param commonDate
     */
    void updateGroupSyncToken(@Param("id") String groupId, @Param("syncToken") String syncToken, @Param("updateTime") Date commonDate);

    /**
     * 查找更新时间 >= timestamp的分组
     *
     * @param orgId
     * @param updateTime
     * @return
     */
    GroupEntity findOneByUpdateTimeGt(@Param("orgId") String orgId, @Param("updateTime") Date updateTime);

    /**
     * 更新 SyncToken
     *
     * @param groupId
     * @param newSyncToken
     * @param oldSyncToken
     * @param commonDate
     */
    void updateSyncTokenByIdAndSyncToken(@Param("groupId") String groupId,
                                         @Param("newSyncToken") String newSyncToken,
                                         @Param("oldSyncToken") String oldSyncToken,
                                         @Param("updateTime") Date commonDate);
}
